package 简单.滑动窗口;

/**
 * 给你一个长度为 n 下标从 0 开始的字符串 blocks ，blocks[i] 
 * 要么是 'W' 要么是 'B' ，表示第 i 块的颜色。字符 'W' 和 
 * 'B' 分别表示白色和黑色。
 * 给你一个整数 k ，表示想要 连续 黑色块的数目。
 * 每一次操作中，你可以选择一个白色块将它 涂成 黑色块。
 * 请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks
 */
public class 得到K个黑块的最少涂色次数_2379 {

    public static void main(String[] args) {

        System.out.println(minimumRecolors("WBBWWBBWBW", 7));

    }

    /**
     * 滑动窗口
     * 滑动窗口大小为 k
     */
    public static int minimumRecolors(String blocks, int k) {
        int min = blocks.length();
        int left = 0, right = 0;
        int wSum = 0;
        while (right < blocks.length()) {
            while (right < blocks.length() && right - left + 1 <= k) {
                if (blocks.charAt(right) == 'W') {
                    wSum++;
                }
                right++;
            }
            min = Math.min(min, wSum);

            if (blocks.charAt(left) == 'W') {
                wSum--;
            }
            left++;
        }
        return min;
    }

}
